package br.com.werp.regras.acesso.integracao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

import br.com.werp.regras.geral.integracao.MasterDAO;
import br.com.werp.regras.geral.vos.tabelas.Acesso;
import br.com.werp.regras.geral.vos.tabelas.Usuario;


/**
 * @author Sobreira
 * Created on 03/10/2005
 */
public class AcessoDAO extends MasterDAO {
    private static final String USUARIO_LOGADO = "USUARIO_LOGADO";
    private static final String URL_USUARIO = "URL_USUARIO";
    private static AcessoDAO acessoDAO;

    private AcessoDAO(String banco) throws Exception {
        super(banco);
    }

    public static AcessoDAO getAcessoDAO() throws Exception {
        if (acessoDAO == null) {
            acessoDAO = new AcessoDAO("");
        }

        return acessoDAO;
    }

    public void inserirAcesso(Acesso acesso) throws Exception {
        Connection connection = getConexao();

        try {
            inserirVO(connection, acesso);
        } finally {
            liberaConeccao(connection);
        }
    }

    public boolean verificaUsuariosLogado(Usuario usuario, Timestamp agora,
        Timestamp cincoMinAtraz) throws Exception {
        String query = getQuery(USUARIO_LOGADO);
        Connection conn = getConexao();

        try {
            PreparedStatement statement = conn.prepareStatement(query);
            setTimeStamp(1, statement, cincoMinAtraz);
            setTimeStamp(2, statement, agora);
            setString(3, statement, usuario.getUsur_login());

            return statement.executeQuery().next();
        } finally {
            liberaConeccao(conn);
        }
    }

    public List obterUrlsUsuario(String usuario) throws Exception {
        List retorno = new ArrayList();
        String query = getQuery(URL_USUARIO);
        Connection conn = getConexao();

        try {
            PreparedStatement statement = conn.prepareStatement(query);
            setString(1, statement, usuario);

            ResultSet set = statement.executeQuery();

            while (set.next()) {
                retorno.add(set.getString("URL_PATH"));
            }

            set.close();
        } finally {
            liberaConeccao(conn);
        }

        return retorno;
    }
}
